Transformer提出于NeurIPS17的文章Attention is all you need,其核心是self-attention:输入为 ,是一个序列,序列中的元素称为token。对 进行线性运算得到 ,其中 进行相似度计算,获得 中每一个元素与 的相关性。根据这种相关性,利用 中相应的元素来构造输出。类似于CNN中的并行分支,self-attention也可以被设计为并行结构,称为multi-head attention:再此基础上,衍生出了Transformer的encoder和decoder,一个Transformer通常由多个encoder和decoder堆叠而成。一般结构如下图所示。除self-attention外,encoder和decoder还包含残差、归一化以及Feed Forward(FFN):值得注意的是,最近的文章 Attention is Not All You Need: Pure Attention Loses Rank Doubly Exponentially with Depth 表明,残差与FFN非常重要,有助于对抗rank collapse,而归一化的作用不大。https://zhuanlan.zhihu.com/p/356444120此外,还有一个小细节 positional encoding。由于self-attention具有排列不变性,利用位置编码来提供空间/时序信息。进入self-attention之前,序列特征与positional encoding以加法的形式融合。positional encoding可以通过学习得到,也可以认为设计。通常,用sin-cos联合编码( 表示token的index, 表示feature dim):
02
小TransformerTransformer的一个缺点在于”大“,不论是计算量、参数量、还是所需要的内存资源,都限制了它在视觉领域的落地与应用。因此,我比较关注如何把Transformer做小。有两种角度:从self-attention出发,从encoder/decoder block出发。基于self-attention。self-attention的缺点在于,为了描述token之间相似度,以平方复杂度的代价构造了一个attention map。很早就意识到这个问题,并设计了线性attention:在此基础上,LambdaNetworks: Modeling long-range Interactions without Attention 提出了LambdaNetwork输入输出关系为: ,一般地 构造Lambda function如下:其中 为 的归一化, 为positional encoding。 称为positional lambda , 称为content lambda 。图5中, ,因此用 的Lambda代替了 的attention map。一般而言,深度方向(例如CNN特征的channel方向)嵌入了较强的语义信息,因此 较attention map而言,语义性更强。对于 个不同的position,Lambda function构造的“内容”是一致的,即 。而 根据quary的position给出不同的信息,可以看做上下文关系。基于block,DeLighT: Deep and Light-weight Transformer 从block的角度对Transformer进行了加深和轻量化。一个Transformer block只有一个非线性激活,而CNN每个卷积层后均加入激活函数,如果设置block的数量接近CNN中卷积层数,参数量会很大。因此Transformer的非线性建模能力理论上弱于CNN。因此,作者希望增加Transformer的深度,并控制参数量。如上图所示DeLighT在attention之前增加了 个线性层,并缩小attention特征的的维度,在FFN上也做了一个沙漏设计来减小参数量。在上图绿色部分,作者采用了 group linear transformations (GLTs),利用feature shuffle和group来增强模型在学习过程中的鲁棒性并减小参数量。另外,作者认为整个网络中均匀增加参数量会带来冗余。类似地,ResNet50的各个block也有不同的卷积层数。作者的做法是控制 ,在深度增加的同时,组件增加参数量。靠近input的地方shallower and narrower,靠近output的地方deeper and wider。DeLighT的研究动机并不是特别明确,加深了Transformer却没有增加其非线性表达能力,我并未理解背后的原因。
03
Transformer in ClassificationViT 是第一个将Transformer用于视觉分类的工作,思想简洁清晰,将图像分为多个path来构造序列,再输入传统的Transformer结构。这并不是一种全新的思想,早年在RNN大火的时候就有学者把图像分类视为序列问题,而Transformer相比于RNN的一点优势在于可并行处理。DeepViT: Towards deeper vision transformer 对ViT的深度进行了研究,发现通过增加encoder block带来性能提升会饱和。作者对这个现象进行了更多实验,发现现象的本质是attention的相似度增加,称为attention collapse。如图28(a)所示,在一个有32个block的ViT中,随着block index的增加,attention相似度也增加。如(b)所示,当block数量从12增加到32,有相似attention的block也增加。但是,head之间的相似度始终很低。因此,作者设计了Re-attention:通过一个可学习的transformation matrix 来融合multi-head的attention map。从实验可以看出,Re-attention显著降低了attention的相似性。TransFG: A Transformer Architecture for Fine-grained Recognition 将Transformer应用到了精细分类任务中。作者的实验表明ViT在精细分类任务中以达到了较好地性能,但是精细分类需要更多地关注“有鉴别力”的区域,因此现有方法有待提高。在划分patch序列时,作者认为保持一定的overlap有助于保存局部区域信息。这些patch经过线性映射获得Transformer的输入:用 表示第 层encoder的输出,共 层。通常, 被看作class token,用于分类,但作者认为这种方法并未考虑后续token的信息,可能丢失了discriminative regions。于是,提出part selection module(PSM),具体做法是改变最后一层encoder的输入:
Transformer in GAN在图像生成领域,TransGAN: Two transformers can make one strong GAN利用两个Transformer encoder构造生成器与判别器。对于生成器,作者借鉴CNN的多尺度设计了多尺度的encoder,逐渐增加输出token的数量。对于判别器,采用了ViT的分类思路。作者的实验表明,Transformer的生成能力很强,但判别能力不足,因此Transformer生成器加CNN判别器带来了最好的效果。并且,TransGAN对数据扩增的需求很强。Generative adversarial transformers提供了另外一种用Transformer做图像生成任务的思路。与其说是用Transformer做GAN,本文更像是利用attention机制来改善StyleGAN的问题:1)CNN没有双向交互;2)CNN的局部感受野妨碍了long-range依赖和全局理解;3)StyleGAN不能控制局部属性。用 表示输入的 个向量,维度为 ,可理解为图像特征, ;用 表示聚合变量(latent),用于控制生成属性。Attention机制表示为 ,Transformer layer表示为 。在此基础上,作者提出Simplex attention: